package com.wakala.employment.utils;

import java.util.Objects;
import java.util.function.BiConsumer;

/**
 * <p>
 * 实施此接口可以使对象成为目标
 * </p>
 *
 * @Author REID
 * @Blog https://blog.csdn.net/qq_39035773
 * @GitHub https://github.com/BeginnerA
 * @Data 2021/2/23
 * @Version V1.0
 **/
public class ForEachUtils {

    /**
     * 对每个元素执行给定的操作
     * @param elements 元素
     * @param action 每个元素要执行的操作
     * @param <T> T
     */
    public static <T> void forEach(Iterable<? extends T> elements, BiConsumer<Integer, ? super T> action) {
        forEach(0, elements, action);
    }

    /**
     * 对每个元素执行给定的操作
     * @param startIndex 开始下标
     * @param elements 元素
     * @param action 每个元素要执行的操作
     * @param <T> T
     */
    public static <T> void forEach(int startIndex, Iterable<? extends T> elements, BiConsumer<Integer, ? super T> action) {
        Objects.requireNonNull(elements);
        Objects.requireNonNull(action);
        if(startIndex < 0) {
            startIndex = 0;
        }
        int index = 0;
        for (T element : elements) {
            index++;
            if(index <= startIndex) {
                continue;
            }
            action.accept(index-1, element);
        }
    }
}